#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include<thread> 

using namespace std;
// void* thread_Run(void* arr)
// {
//   int *a = static_cast<int*>(arr);
//    for(int i = 0;i < 10;++i)
//    {
//     cout << a[i] << ' ';
//    }
//    cout << endl;
//    return nullptr;
// }

// int main()
// {
//    int *a = new int[10];
//    for(int i = 0;i < 10;++i) a[i] = i;
//    pthread_t tid;
//    pthread_create(&tid,nullptr,thread_Run,a);
//    while(1)
//    {
//     cout << "I am a thread\n";
//     sleep(1);
//    }
//     return 0;
// }

// 可以被多个执行流同时执行
// int g_val = 100;
// void show(const string &name)
// {
//     cout << name << " say# " << "hello thread" << endl;
//     cout << "g_val: " << g_val << endl;
// }
// void *thread_Run(void *arg)
// {
//     const char *name = (const char *)arg;
//     int cnt = 0;
//     while (true)
//     {
//         //   cout << "new thread pid: " << getpid() << endl;
//         show("new thread");
//         cout << name << endl;
//         sleep(2);
//         g_val++;
//         ++cnt;
//         if (cnt == 3)
//             break;
//     }
//     // return nullptr; //走到这里默认退出
//     // exit(11);//是用来终止进程的,不能用来终止线程
//     // return (void*)1;
//     // pthread_exit(void*(100));
//     pthread_exit((void *)100);
// }

// int main()
// {

//     pthread_t tid;
//     //    pthread_create(&tid,nullptr,thread_Run,nullptr);
//     pthread_create(&tid, nullptr, thread_Run, (void *)"thread 1");
//     sleep(1);
//     pthread_cancel(tid);
//    // PTHREAD_CANCELED;
//     // 不是系统调用
//     //    cout << sizeof(void*) << endl;
//     int cnt = 0;
//     while (true)
//     {
//         // cout << "main thread pid: " << getpid() << endl;
//         show("main thread");
//         cout << "tid: " << tid << endl;
//         sleep(1);
//         g_val++;
//         ++cnt;
//         if (cnt == 5)
//             break;
//     }
//     void *retval;
//     pthread_join(tid, &retval); // 默认阻塞等待!
//     // 为什么这里不考虑异常呢? ? ? 做不到,线程一旦出异常主线程也挂了

//     cout << reinterpret_cast<long long int>(retval) << endl;
//     cout << "main thread quit ..." << endl;
//     return 0;
// }
// class Request
// {
// public:
//     Request(int start, int end, const string &n)
//         : _start(start),
//           _end(end),
//           _name(n)
//     {
//     }
//     int _start;
//     int _end;
//     string _name;
// };

// class Response
// {
// public:
//     Response(int r, int e)
//         : _result(r), _exitcode(e)
//     {}
//     int _result;   // 结果
//     int _exitcode; // 是否合理
// };
// void *sumCount(void *args)
// {
//     Request* it = static_cast<Request*>(args);
//     Response*rsq = new Response(0,0);
//     int sum = 0;
//     for(int i = it->_start;i <= it->_end;++i)
//     {
//        sum += i;
//     }
//     rsq->_result = sum;
//     rsq->_exitcode = 1;
//     delete rsq;
//     return (void*)rsq;
// }
// int main()
// {
//     pthread_t tid;
//     Request *rq = new Request(1,100,"thread 1 ");
//     pthread_create(&tid, nullptr, sumCount, rq);
    
//     void* retval;
//     pthread_join(tid, &retval);
//     Response* it = static_cast<Response*>(retval);
//     if(it->_exitcode == 1)
//     {
//         cout << "结果可靠" << " 答案为:" << it->_result << endl;
//     }
//     else
//     {
//         cout << "结果不可靠!!!!" << endl;
//     }
//     delete rq;
//     return 0;
// }
// void threadRun()
// {
//     while(1)
//     {
//         cout << "I am a new thread for C++" << endl;
//         sleep(1);
//     }
// }
// int main()
// {
//    thread t(threadRun);

//    t.join();
//    t.get_id() ;
//     return 0;
// }

